import { window, Selection, workspace, WorkspaceConfiguration } from 'vscode'
import { ChineseCharacterItem } from '~/views/providers/ReplaceProvider'
import { promptEdit } from '~/utils/prompts'
import { Telemetry, TelemetryKey } from '~/core'
import path from 'path'

/**
 * 打开输入框让用户输入新内容并替换原中文字符
 */
export async function ReplaceEditKey(item?: ChineseCharacterItem) {
  if (!item || !item.text || !item.line) {
    return
  }

  Telemetry.track(TelemetryKey.EditKey, { actionSource: 'replace-panel' })

  try {
    // 获取活动编辑器
    const editor = window.activeTextEditor
    if (!editor) {
      return
    }

    // 显示输入框让用户输入新内容
    const newValue = await promptEdit(
      item.text, // 使用中文字符作为临时键名
      'zh-CN',   // 语言
      item.text  // 默认值
    )

    // 如果用户取消了输入或没有修改内容，则不执行替换
    if (newValue === undefined || newValue === item.text) {
      return
    }

    // 获取文件的所有行
    const document = editor.document
    const fullText = document.getText()
    const lines = fullText.split('\n')
    
    // 找到包含中文字符的行
    if (lines.length >= item.line) {
      // 找到该行中的中文字符位置
      const targetLine = lines[item.line - 1]
      const charIndex = targetLine.indexOf(item.text)
      
      if (charIndex !== -1) {
        // 创建替换范围
        const startPos = document.positionAt(fullText.indexOf(item.text))
        const endPos = document.positionAt(fullText.indexOf(item.text) + item.text.length)

        // 获取文件路径信息
        const filePath = document.uri.fsPath;
        const workspaceFolder = workspace.getWorkspaceFolder(document.uri);
        
        let filePathPrefix = '';
        if (workspaceFolder) {
          // 计算相对路径
          let relativePath = path.relative(workspaceFolder.uri.fsPath, filePath);
          // 将路径分隔符统一转换为点
          relativePath = relativePath.replace(/[\\\/]/g, '.');
          // 移除文件扩展名
          const ext = path.extname(relativePath);
          if (ext) {
            relativePath = relativePath.slice(0, -ext.length);
          }
          filePathPrefix = relativePath + '.';
        }

        // 获取配置的替换模板
        const config: WorkspaceConfiguration = workspace.getConfiguration('i18n-ally');
        const replacementTemplate: string = config.get('replaceTranslateKey.template', 'VALUE');
        
        // 使用翻译结果替换模板中的VALUE
        let finalText: string;
        if (replacementTemplate.includes('VALUE')) {
          // 只有当模板中包含'VALUE'字符串时才执行替换
          finalText = replacementTemplate.replace('VALUE', filePathPrefix + newValue);
        } else {
          // 否则直接使用翻译后的文本
          finalText = filePathPrefix + newValue;
        }
        
        // 执行替换
        await editor.edit(editBuilder => {
          editBuilder.replace(
            new Selection(startPos, endPos),
            finalText
          )
        })
      }
    }
  } catch (error) {
    console.error('编辑中文字符时出错:', error)
  }
}